<?php
/**
 * Created by .
 * User: luogan
 * Date: 2022/1/13
 */

namespace app\admin\validate;



use app\exception\ParameterException;
use think\exception\ValidateException;
use think\Validate;

class BaseValidate extends Validate
{
    /**
     * 检测所有客户端发来的参数是否符合验证类规则
     * 基类定义了很多自定义验证方法
     * 这些自定义验证方法其实，也可以直接调用
     * @throws ParameterException
     * @return true
     */
    public function goCheck($params,$sene)
    {
        //过滤场景验证参数
        $scene = $this->scene[$sene];
        foreach ($params as $k => $v){
            if (!in_array($k,$scene)){
                unset($params[$k]);
            }
        }
        try {
            $this->batch(true)->failException(true)->scene($sene)->check($params);
        } catch (ValidateException $e) {
            // 验证失败 输出错误信息
            $msg = is_array($e->getError()) ? implode(';', $e->getError()) : $e->getError();
            throw new ParameterException($msg);
        }

        return $params;
    }

    /**
     * 正整数验证规则
     * @param $value
     * @param string $rule
     * @param string $data
     * @param string $field
     * @return bool|string
     */
    protected function isPositiveInteger($value, $rule='', $data='', $field='')
    {
        if (is_numeric($value) && is_int($value + 0) && (int)$value > 0) {
            return true;
        }
        return $field . '必须是正整数';
    }

    /**
     * 大于等于0的正整数验证规则
     * @param $value
     * @param string $rule
     * @param string $data
     * @param string $field
     * @return bool|string
     */
    protected function isInteger($value, $rule='', $data='', $field='')
    {
        if (is_numeric($value) && is_int($value + 0) && (int)$value >= 0) {
            return true;
        }
        return $field . '必须大于等于0的正整数';
    }

    protected function isNotEmpty($value, $rule='', $data='', $field='')
    {
        if (empty($value)) {
            return $field . '不允许为空';
        }
        return true;
    }



}